package com.xygz.orm.model;

import com.xygz.orm.SColumn;

/**
 * the description for class ColumnData
 *
 * @param <E> 列类型
 * @param <V> 值类型
 * @author xiyuan-lgz 2024-05-19 @version v1.0.0 新建与整理
 */

public class ColumnData<E, V> {
    private E column;
    private V value1;
    private V value2;
    
    
    private SColumn col;
    
    /**
     *
     */
    public ColumnData() {}
    
    /**
     * @param column
     * @param value1
     */
    public ColumnData(E column, V value1) {
        this.column = column;
        this.value1 = value1;
    }
    
    /**
     * @param column 数据列
     * @param value1 值1
     * @param value2 值2
     */
    public ColumnData(E column, V value1, V value2) {
        this.column = column;
        this.value1 = value1;
        this.value2 = value2;
    }
    
    
    /**
     * 获取列的方法
     *
     * @return 返回列对象E
     */
    public E getColumn() {
        // 返回column属性值
        return column;
    }
    
    /**
     * 设置列数据的方法
     * 这是一个泛型方法，用于设置列的值，并返回当前对象以支持链式调用
     *
     * @param column 要设置的列值，类型为E
     * @return 返回当前ColumnData对象，支持链式调用
     */
    public ColumnData<E, V> setColumn(E column) {
        // 将传入的column参数赋值给当前对象的column属性
        this.column = column;
        // 返回当前对象实例
        return this;
    }
    
    /**
     * 获取value1的值的方法
     *
     * @return 返回value1的值，类型为V
     */
    public V getValue1() {
        // 返回value1的值
        return value1;
    }
    
    /**
     * 设置value1的值并返回当前对象，用于链式调用
     *
     * @param value1 要设置的值
     * @return 返回当前ColumnData对象，支持链式调用
     */
    public ColumnData<E, V> setValue1(V value1) {
        // 将传入的value1值赋给当前对象的value1属性
        this.value1 = value1;
        // 返回当前对象，支持链式调用
        return this;
    }
    
    /**
     * 获取value2的值的方法
     *
     * @return 返回value2的值
     */
    public V getValue2() {
        // 返回value2的值
        return value2;
    }
    
    /**
     * 设置value2的值并返回当前对象，支持链式调用
     *
     * @param value2 要设置的值
     * @return 返回当前ColumnData对象，以便进行链式调用
     */
    public ColumnData<E, V> setValue2(V value2) {
        // 将传入的value2值赋给当前对象的value2属性
        this.value2 = value2;
        // 返回当前对象，支持链式调用
        return this;
    }
    
    /**
     * 设置值的方法
     *
     * @param value 要设置的值
     * @return 返回当前ColumnData对象，支持链式调用
     */
    public ColumnData<E, V> setValue(V value) {
        // 将传入的value赋值给value1成员变量
        this.value1 = value;
        // 返回当前对象，以便支持链式调用
        return this;
    }
    
    public SColumn getCol() {
        return col;
    }
    
    public ColumnData<E, V> setCol(SColumn col) {
        this.col = col;
        return this;
    }
    
    /**
     * 获取值的方法
     *
     * @return 返回值类型为V，通过调用getValue1()方法获取
     */
    public V getValue() {
        // 调用getValue1()方法并返回其结果
        return getValue1();
    }
}
